﻿@{
    ViewBag.Title = "Inicio";
}
<h1>Introducción</h1>
La idea de este proyecto fue reflejar posibles implementaciones y usos de servicios web en la plataforma ASP.NET de Microsoft.
Para ello se tomó un proyecto previamente desarrollado (Event Planner) y se le añadieron dos servicios que permiten obtener
información almacenada en el sistema, también se incorporó un mínimo widget que usa jQuery. Para mostrar el funcionamiento se 
implementó otra aplicación,  utilizando el framework ASP.NET MVC 3, que consulta los servicios web y muestra la infromación obtenida dándole 
un formato amigable al usuario.
<h2>Arquitectura</h2>
Aquí se muestra cómo se comunican los sistemas.
<img id="arq-wrapper" alt="Arquitectura" src="../../Content/arq.png" />
<h1>Apliciación Event Planner</h1>
Ésta es la previemente implementada, a continuación se detalla la funcionalidad añadida para este proyecto.
<h2>Servicios Web</h2>
Se utilizó la API 
<a href="http://msdn.microsoft.com/es-AR/library/ms731082.aspx" target="_blank">Windows Communication Foundation</a> (WCF).
Los servicios que se detallarán a continuación se implementaron basándose de dos templates de la API:
"WCF Service" y "AJAX-enabled WCF Service" respectivamente
<ul>
    <li>
        <strong>EventosWCF</strong>:
        Implementa un servicio web SOAP (ver <a href="http://localhost:49357/Services/EventosWCF.svc?wsdl" target="_blank">WSDL</a>), lo que permite ser utilizado de forma transparente por el cliente a través de una
        "referencia de servicio". Básicamente se consulta como si se tratara de una clase local (fuertemente tipado). <br />
        Este servicio retorna los datos en formato XML.
        Expone tres funcionalidades:
        <ol>
            <li><i>UnEvento</i>: Dado un identificador de evento retorna toda la información disponible sobre el mismo.</li>
            <li><i>Listado</i>: Lista los eventos ordenados por nombre mediante paginación.</li>
            <li><i>Busqueda</i>: Retorna los resultados de una búsqueda básica sobre el listado de eventos.</li>
        </ol>
    </li>
    <li>
        <strong>EventosAJAX</strong>:
        En este caso el servicio es más simple. Está pensado para ser accedido de forma similar a un servicio REST usando
        únicamente el método HTTP GET<br />
        Los datos se retornan en formato JSon que es resulta más simple de procesar usando código JavaScript en el cliente.
        Expone dos funcionalidades:
        <ol>
            <li><i>Listado</i>: Lista los eventos ordenados por fecha mediante paginación.</li>
            <li><i>ProximosEventos</i>: Retorna los <i>n</i> próximos eventos ordenados por fecha.</li>
        </ol>
    </li>
</ul>
<h2>Widget</h2>
Consiste básicamente de un código JavaScript 
(<a href="http://localhost:49357/Services/Widget/widgetEventos.js" target="_blank">link</a>)
que es alojado en el servidor de Event Planner, y que al ser
incluído en una página cliente y luego invocar la función <i>widgetEventos</i> con los parámetros correspondientes,
inserta información obtenida mediante AJAX como parte del contenido de la página.

<h1>Aplicación Cliente</h1>
Aquí se implementaron las consultas a todos los servicios descriptos y se utilizaron diferentes formas para mostrar la información.
<br />Para el servicio WCF se resuleve todo en el servidor, el XML obtenido es utilizado como modelo (según el patrón MVC) de una
vista que muestra el contenido.
<br />En el caso del servicio AJAX las consultas se hacen a través de JavaScript en el lado del cliente. Se usó la API jQuery 
para el acceso, ya que simplifica el acceso <i>cross-domain</i> a los servicios, y también para la presentación de los datos.
<br />Por último, para el widget, simplemente se referenció al script en una página y se invocó a la función correspondiente.